import java.util.ArrayList;
import java.util.List;

public class 备忘录模式 {
    public static void main(String[] args) {
        Originator originator = new Originator(); // 创建发起人
        Caretaker caretaker = new Caretaker();   // 创建备忘录集合 -管理者
        // 设置状态并保存
        originator.setState("State #1");
        caretaker.add(originator.saveStateToMemento());
        originator.setState("State #2");
        caretaker.add(originator.saveStateToMemento());
        originator.setState("State #3");
        // 恢复状态
        System.out.println("Current State: " + originator.getState());
        originator.getStateFromMemento(caretaker.get(0));
        System.out.println("First saved State: " + originator.getState());
        originator.getStateFromMemento(caretaker.get(1));
        System.out.println("Second saved State: " + originator.getState());
    }
}
// 发起人类，负责创建和恢复备忘录
class Originator {
    private String state; // 对象的状态
    // 获取当前状态
    public String getState() {
        return state;
    }

    // 设置当前状态
    public void setState(String state) {
        this.state = state;
    }
    // 创建备忘录
    public Memento saveStateToMemento() {
        return new Memento(state); // 将当前状态保存到备忘录
    }
    // 从备忘录恢复状态
    public void getStateFromMemento(Memento memento) {
        this.state = memento.getState(); // 恢复状态
    }


}

// 备忘录类，用于存储状态
class Memento {
    private final String state; // 保存状态（不可变）

    // 构造函数，设置状态
    public Memento(String state) {
        this.state = state;
    }

    // 获取状态
    public String getState() {
        return state;
    }
}
// 管理者类，负责管理备忘录
class Caretaker {
    private final List<Memento> mementoList = new ArrayList<>(); // 存储多个备忘录

    // 添加备忘录
    public void add(Memento memento) {
        mementoList.add(memento);
    }

    // 获取备忘录
    public Memento get(int index) {
        return mementoList.get(index);
    }
}